package com.wgy.Day28异常.异常注意事项;

import java.util.List;

/*多个异常使用捕获的处理方法:
        1.多次捕获,多次处理
        2.一次捕获,多次处理
          如果catch里面定义的异常变量如果存在父子类关系的,那么子类的异常必须在上面的catch中
          父类的异常在子类catch下面的catch中.
        3.一次捕获,一次处理

异常注意事项:1.运行时的异常被抛出可以不处理,即不捕获也不声明抛出
           2.在try...catch后可以追加finally代码块,其中的代码一定会被执行,通常适用于资源回收  举例说明:Demo07Finally
           3.如果finally里有return语句,永远返回finally中的结果,应避免这种情况             举例说明:Demo09异常注意事项finally
           4.如果父类抛出多个异常,子类覆盖重写父类方法时,只能抛出和父类相同的异常或者是父类异常的子类或者不抛出异常 举例说明:Demo10异常注意事项父子类
           5.父类方法没有抛出异常,子类重写父类方法该方法也不可抛出异常.此时子类产生该异常,只能捕获处理,不能声明抛出 举例说明:Demo10异常注意事项父子类

           总结:父类异常是什么样,子类就是什么样
           */
public class Demo08异常注意事项 {
    public static void main(String[] args) {
    /*    //1.多次捕获,多次处理
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]);      //ArrayIndexOutOfBoundsException
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println(e);
        }
        try {
            List<Integer> list = List.of(1, 2, 3);
            System.out.println(list.get(3));   //IndexOutOfBoundsException
        } catch (IndexOutOfBoundsException e) {
            System.out.println(e);
        }
        */

        //2.一次捕获,多次处理
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]);
            List<Integer> list = List.of(1, 2, 3);
            System.out.println(list.get(3));
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println(e);
        } catch (IndexOutOfBoundsException e) {
            System.out.println(e);
        }
 /*  一个try多个catch的注意事项:
          catch里面定义的异常变量如果存在父子类关系的,那么子类的异常必须在上面的catch中
          父类的异常在子类catch下面的catch中
          ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException

        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]);
            List<Integer> list = List.of(1, 2, 3);
            System.out.println(list.get(3));
        } catch (IndexOutOfBoundsException e) {      //错误写法
            System.out.println(e);
        }catch (ArrayIndexOutOfBoundsException e) {
            System.out.println(e);}
*/

        // 3.一次捕获,一次处理
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]);
            List<Integer> list = List.of(1, 2, 3);
            System.out.println(list.get(3));
        } catch (Exception e) {
            System.out.println(e);
        }

        System.out.println("后续代码执行啦");

    }
}
